home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / lan / nbsamp.arc / NBRCV.C next >
Text File  |  1988-09-26  |  3KB  |  97 lines

  1. /* NBRCV.C -  sample program - receives NetBIOS broadcast. -          */
  2. /* Paul McGinnis - AST Research, Data Comm Support - Dept. 430        */
  3. /* August 1988. - comments added 9/26/88                              */
  4. /*                                      */
  5. /* General calling sequence for NetBIOS calls:                        */
  6. /* 1. Set up NCB (Network Control Block)                              */
  7. /* 2. Make ES:BX point to NCB structure                               */
  8. /* 3. Load AX with 100h                                               */
  9. /* 4. Generate an INT 5Ch                                             */
  10. /*                                       */
  11. /* NetBIOS commands and definitions in NETBIOS.H                      */
  12. /*                                      */
  13. /* Compilation information:                                           */
  14. /* Compiler: Borland Turbo C v1.5                                     */
  15. /* Memory model: Small                                                */
  16. /* Floating point support: none                                       */
  17.  
  18.  
  19. #include <dos.h>
  20. #include <stdio.h>
  21. #include <netbios.h>
  22. #include <stdlib.h>
  23. #include <string.h>
  24.  
  25.  
  26. main()
  27. {
  28.   NCB far * rcv_block;
  29.   char far * rcv_message;
  30.   char far * session_name;
  31.   unsigned char ret_code, net_num, iflag;
  32.   rcv_block = (NCB far *) malloc(sizeof(NCB));
  33.   rcv_message = (char far *) malloc(80);
  34.   session_name = (char far *) malloc(16);
  35.   _AH = 0;
  36.   geninterrupt(0x2a);   /* Check to see if NetBIOS is loaded */
  37.   iflag = _AH;
  38.   if (!iflag)
  39.   {
  40.     puts("    *** ERROR - NetBIOS not installed. ***");
  41.     return;
  42.   }
  43.   printf("Enter session name: ");
  44.   gets(session_name);
  45.   puts("generating network name...");
  46.   rcv_block -> NCB_COMMAND = ADD_NAME_WAIT;   /* Use default time-out values */
  47.   rcv_block -> NCB_LANA_NUM = 0;
  48.   rcv_block -> NCB_STO = 0;
  49.   rcv_block -> NCB_RTO = 0;
  50.   strncpy(rcv_block -> NCB_NAME, session_name, 16);  /* Copy name to NCB   */
  51.   strncpy(rcv_block -> NCB_CALLNAME, "*", 16);  /* Check all names on net  */
  52.   _ES = FP_SEG(rcv_block);
  53.   _BX = FP_OFF(rcv_block);
  54.   _AX = 0x100;
  55.   geninterrupt(0x5c);
  56.   ret_code = _AL;
  57.   net_num = rcv_block -> NCB_NUM;
  58.   if (ret_code)
  59.   {
  60.     printf("Bad return code = %02Xh\n", ret_code);
  61.     return;
  62.   }
  63.   printf("Session established. Name number = %02Xh\n", net_num);
  64.   puts("Waiting for broadcast message...");
  65.   rcv_block -> NCB_RTO = 0;
  66.   rcv_block -> NCB_BUFFER_OFFSET = FP_OFF(rcv_message);
  67.   rcv_block -> NCB_BUFFER_SEGMENT = FP_SEG(rcv_message);
  68.   rcv_block -> NCB_LENGTH = 80;
  69.   rcv_block -> NCB_COMMAND = RECEIVE_BCST_DATAGRAM_WAIT; /* Wait until rcvd. */
  70.   _ES = FP_SEG(rcv_block);
  71.   _BX = FP_OFF(rcv_block);
  72.   _AX = 0x100;
  73.   geninterrupt(0x5c);
  74.   ret_code = _AL;
  75.   pokeb(FP_SEG(rcv_message), FP_OFF(rcv_message) + rcv_block -> NCB_LENGTH, 0);
  76.   if (ret_code)
  77.     printf("Error number = %02Xh\n", ret_code);
  78.   else
  79.   {
  80.     printf("%c*** %Fs\n", 7, rcv_message);
  81.     printf("From: %Fs\n", rcv_block -> NCB_CALLNAME);
  82.   }
  83.   printf("Releasing session >>>%Fs<<<, number %02Xh\n",
  84.     rcv_block -> NCB_NAME, net_num);
  85.   rcv_block -> NCB_NUM = net_num;
  86.   rcv_block -> NCB_COMMAND = DELETE_NAME_WAIT; /* Schedule name for removal */
  87.   _ES = FP_SEG(rcv_block);
  88.   _BX = FP_OFF(rcv_block);
  89.   _AX = 0x100;
  90.   geninterrupt(0x5c);
  91.   ret_code = _AL;
  92.   if (ret_code)
  93.     printf("Error number = %02Xh.\n", ret_code);
  94.   else
  95.     puts("Completed normally.");
  96. }
  97.